package com.etc.user.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.etc.entity.*;
import com.etc.entity.Cartitem;
import com.etc.service.*;
import com.etc.service.impl.FlashOrderServiceImpl;
import com.etc.utils.AlipayConfig;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;

@Controller
@RequestMapping("user.action")
public class AilpayController {
    @Autowired
    private OrderListService orderListService;

    @Autowired
    private OrderService orderService;

    @Autowired
    private GoodsPictureService goodsPictureService;

    @Autowired
    private FlashOrderServiceImpl flashOrderService;

    @Autowired
    private GoodsService goodsService;

    @Autowired
    private CartService cartService;

    @Autowired
    private CartitemService cartitemService;


    @RequestMapping(value = "apliay")
    public ModelAndView getMoney(HttpServletRequest request, HttpServletResponse response, HttpSession session,Integer order,double subtotal,Integer userid) {
        ModelAndView md = new ModelAndView();
        md.setViewName("../tellogin");



            //总支付价格

            AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
                    AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,
                    AlipayConfig.sign_type);

            // 设置请求参数
            AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
            alipayRequest.setReturnUrl(AlipayConfig.return_url);
            alipayRequest.setNotifyUrl(AlipayConfig.notify_url);


            // 商户订单号，商户网站订单系统中唯一订单号，必填
            String out_trade_no = new String("" + System.currentTimeMillis());
            // 付款金额，必填
            String total_amount = String.valueOf(subtotal);
            // 订单名称，必填
            String subject = new String("小馋猫");
            // 商品描述，可空
          String body = new String("小馋猫超市");

            alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount
                    + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","
                    + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

            // 若想给BizContent增加其他可选请求参数，以增加自定义超时时间参数timeout_express来举例说明
            // alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
            // + "\"total_amount\":\""+ total_amount +"\","
            // + "\"subject\":\""+ subject +"\","
            // + "\"body\":\""+ body +"\","
            // + "\"timeout_express\":\"10m\","
            // + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
            // 请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节

            // 请求
            String result = null;
            try {
                result = alipayClient.pageExecute(alipayRequest).getBody();

            } catch (AlipayApiException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        //增加订单
        //获取生成的订单号
        String ordernum=flashOrderService.getOrderNum("OO");
        Cart cart=cartService.getCarById(order);
        //得到这个订单总共需要多少钱doLessGoodsNum
        Double ordersalary=cartService.countOrderSalary(order);
        Orders orders=new Orders(null,ordernum, cart.getUserid(),ordersalary, new Date(),1);
        //添加总的订单进去
        boolean flag1= orderService.insertSelective(orders);
        System.out.println(flag1);
        //得到添加成功后的订单id
        Integer orederid=orderService.selectByOrderNum(ordernum).getOrderid();
        //得到该购物车的购物车项
        List<Cartitem> listGoods=cartitemService.mySelectCartitemByCartId(order);
        //执行插入语句
        for (Cartitem cartitem:listGoods) {
            orderListService.insertSelective(new OrderList(null,orederid,cartitem.getGoodsid(),cartitem.getGoodsnum()));
        }
        if(flag1){
            //Integer cartid =cartService.getCartidByUserid(userid);
            boolean flag = cartitemService.deletCartitemByCartid(order);
           /* if (flag){
                boolean isok = cartService.deleteCartBycartid(cartid);
            }*/
        }

            // 输出


            md.setViewName("user/Alipay");
            md.addObject("result", result);
            return md;

    }

}
